package work3;

import java.util.*;

/**
 *
 * 使用集合实现斗地主游戏的部分功能，要求如下：
 *
 *  （1）首先准备 54 张扑克牌并打乱顺序。
 *
 *  （2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。
 *
 *  （3）查看三个玩家手中的扑克牌和底牌。
 *
 *  （4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：
 *
 *     手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
 *
 *
 * */
public class Test5 {
    public static void main(String args[]){
        //准备54张扑克   给扑克定义了一个实体类，用来存放牌面大小，牌和花色
        List<PokerBean> listAll = new ArrayList<>();
        PokerBean bean1 = new PokerBean("大王","",0);
        listAll.add(bean1);
        PokerBean bean2 = new PokerBean("小王","",1);
        listAll.add(bean2);
        //为了方便添加，直接字符串查分
        String str = "2,A,K,Q,J,10,9,8,7,6,5,4,3";
        String arr[] = str.split(",");
        //将数组中的子赋予list  重复4次就可以了
        for (int i = 0; i < 4; i++) {
            for (int i1 = 0; i1 < arr.length; i1++) {
                PokerBean bean = new PokerBean(arr[i1],getColor(i),i1 + 2);
                listAll.add(bean);
            }
        }

        //打乱list
        //系统方法
        Collections.shuffle(listAll);
        System.out.println("系统排序后：");
        for (int i = 0; i < listAll.size(); i++) {

            System.out.print(listAll.get(i).getColor() + listAll.get(i).getPokerKey()+ ",");
        }

        //也可以自己写一个
        listAll = shuffleList(listAll);
        System.out.println("");
        System.out.println("自己的方法排序后：");
        for (int i = 0; i < listAll.size(); i++) {

            System.out.print(listAll.get(i).getColor() + listAll.get(i).getPokerKey()+ ",");
        }

        //三个玩家的list 和底牌的list
        List<PokerBean> player1 = new ArrayList<>();
        List<PokerBean> player2 = new ArrayList<>();
        List<PokerBean> player3 = new ArrayList<>();
        List<PokerBean> last = new ArrayList<>();

        //开始发牌   倒数三张不用发 并且 i的值每次+3  因为牌发给三个人就没了
        for (int i = 0; i < listAll.size() - 3; i=i+3) {
            player1.add(listAll.get(i));
            player2.add(listAll.get(i + 1));
            player3.add(listAll.get(i + 2));
        }
        //底牌加入
        last.add(listAll.get(listAll.size() - 3));
        last.add(listAll.get(listAll.size() - 2));
        last.add(listAll.get(listAll.size() - 1));

        //打印三个玩家的牌和剩下的底牌
        System.out.println("");

        //按规则排序

        sortList(player1);
        sortList(player2);
        sortList(player3);
        System.out.println("玩家1的牌");
        for (int i = 0; i < player1.size(); i++) {
            System.out.print(player1.get(i).getColor() +player1.get(i).getPokerKey() + ",");
        }
        System.out.println("");
        System.out.println("玩家2的牌");
        for (int i = 0; i < player2.size(); i++) {
            System.out.print(player2.get(i).getColor() +player2.get(i).getPokerKey() + ",");
        }
        System.out.println("");
        System.out.println("玩家3的牌");
        for (int i = 0; i < player3.size(); i++) {
            System.out.print(player3.get(i).getColor() +player3.get(i).getPokerKey() + ",");
        }
        System.out.println("");
        System.out.println("底牌");
        for (int i = 0; i < last.size(); i++) {
            System.out.print(last.get(i).getColor() +last.get(i).getPokerKey() + ",");
        }
    }
    //获取花色
    private static String getColor(int status){
        switch (status) {
            case 0:
                return "红桃";
            case 1:
                return "方块";
            case 2:
                return "梅花";
            case 3:
                return "黑桃";
        }
        return "";
    }
    //打乱list
    private static List<PokerBean> shuffleList(List<PokerBean> oldList){
        List<PokerBean> newList = new ArrayList<>();
        //while循环，当旧list的size 为0时，所有的数据都转移成功
        while (oldList.size() > 0){
            //在老的list的size中随机取值赋值到新数组中
            int index = new Random().nextInt(oldList.size());
            newList.add(oldList.get(index));
            //赋值完毕后移除
            oldList.remove(index);
        }
        return newList;
    }

    //使用自己的规则为list排序
    private static void sortList(List<PokerBean> list){

        Collections.sort(list, new Comparator<PokerBean>() {

            @Override
            public int compare(PokerBean o1, PokerBean o2) {
                int i = o1.getValue() - o2.getValue();
                if(i == 0){
                    return o1.getValue() - o2.getValue();
                }
                return i;
            }
        });


    }
}
